package control;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;

import excepcionesPropias.ArchivoIncorrecto;
import excepcionesPropias.ElArchivoNoExiste;
import XML.LectorJugadorXml;
import XML.LectorMapaXml;
import vista.VistaInicio;
import modelo.jugador.Jugador;
import modelo.tablero.Ciudad;
import modelo.vehiculos.Auto;
import modelo.vehiculos.Camioneta;
import modelo.vehiculos.Moto;
import modelo.vehiculos.Posicion;
import modelo.vehiculos.Vehiculo;

public class ControlInicio {
	
	private Jugador unJugador;
	private VistaInicio unaVista;
	private Ciudad unMapa;
	private Posicion pos = new Posicion(1,1);
	private Vehiculo movil;
	private String ruta = "src/partidas";
	private boolean cargo = false;
	private int posYRand;

	public ControlInicio(Jugador jug, VistaInicio vista){
		if (jug.getNombre() != "")
			unJugador = jug;
		else
			unJugador = new Jugador("");
		unaVista = vista;
		unMapa = new Ciudad(5,5);
		unMapa.colocarImporvistosRandom();
		movil = new Auto(unMapa,pos,unJugador);
		unJugador.setMaxMov(50);
		

		
		//unaVista.addSeteoJugador(new SetJugador());
		unaVista.addBotonComenzar(new Comenzar());
		
		unaVista.addElegirAuto(new SetAuto());
		unaVista.addElegirMoto(new SetMoto());
		unaVista.addElegirCamioneta(new SetCamioneta());
		
		unaVista.addElegirFacil(new SetMapaFacil());
		unaVista.addElegirMedio(new SetMapaMedio());
		unaVista.addElegirDifcil(new SetMapaDificil());
		
		unaVista.addBotonMenuOpen(new SetBotonAbrir());
		unaVista.addBotnManuSalir(new SetBotonSalir());
	}
	
	private class SetBotonAbrir implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent e) {
			System.out.println("Abrir");
			JFileChooser explorador = new JFileChooser(ruta);
			explorador.setFileFilter(new FileNameExtensionFilter("XML -Partidas" , "xml" ));
			int seleccion = explorador.showDialog(null , "abrir");
			try{
				if (seleccion == JFileChooser.APPROVE_OPTION){
					try{
						LectorJugadorXml lector = new LectorJugadorXml(explorador.getSelectedFile().getPath());
						unJugador = lector.devolverJugador();
						movil = unJugador.getMovil();
						unMapa = unJugador.getMovil().getCiudad();
						System.out.println(unJugador.getNombre());
						cargo = true;
					}catch (Exception ex){
						throw new ArchivoIncorrecto("El arhivo que se intento abrir no corresponde a una partida guardada");
					}
				}
			}catch (ArchivoIncorrecto error){
				System.out.println(error.getMessage());
			}
		}
	}
	
	private class SetBotonSalir implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent e) {
			System.exit(0);
			}
		}
	
	private class SetMoto implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent e) {
			if (!cargo){
				Moto moto = new Moto(unMapa,pos,unJugador);
				movil = moto;
				unJugador.setMovil(moto);
			}
		}
	}
	
	private class SetAuto implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent e) {
			if (!cargo){
				Auto auto = new Auto(unMapa,pos,unJugador);
				movil = auto;
				unJugador.setMovil(auto);
			}
		}
	}
	
	private class SetCamioneta implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent e) {
			if (!cargo){
				Camioneta camioneta = new Camioneta(unMapa,pos,unJugador);
				movil = camioneta;
				unJugador.setMovil(camioneta);
			}
		}
	}
	
	private class SetMapaFacil implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
        	if (!cargo){
	        	unJugador.setNombre(unaVista.getNombre());
	        	LectorMapaXml lector = new LectorMapaXml("src/mapas/mapaFacil.xml");
	            unMapa = lector.getCiudad();
	            unJugador.setMaxMov(50);
        	}
        }
	}

	private class SetMapaMedio implements ActionListener{
	        @Override
	        public void actionPerformed(ActionEvent e) {
	        	if (!cargo){
		        	unJugador.setNombre(unaVista.getNombre());
		        	LectorMapaXml lector = new LectorMapaXml("src/mapas/mapaMedio.xml");
		            unMapa = lector.getCiudad();
		            unJugador.setMaxMov(40);
	        	}
	        }
	}
	
	private class SetMapaDificil implements ActionListener{
	        @Override
	        public void actionPerformed(ActionEvent e) {
	        	if (!cargo){
	        		unJugador.setNombre(unaVista.getNombre());
	        		LectorMapaXml lector = new LectorMapaXml("src/mapas/mapaDificil.xml");
	                unMapa = lector.getCiudad();
	                unJugador.setMaxMov(30);
	        	}
	        }
	}
	
	
	private class Comenzar implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent e) {
			if (!cargo){
				posYRand = new Random().nextInt(unMapa.getFilas())+1;
				pos = new Posicion(posYRand,1);
				movil.setPos(pos);
				unMapa.setLlegada(new Random().nextInt(unMapa.getFilImp()));
				unJugador.setNombre(unaVista.getNombre());
				if(unaVista.getNombre().equals(""))
					unJugador.setNombre("ANONIMO");
			}
			unaVista.dispose();
			movil.setMapa(unMapa);
			
			try {
				new ControlPartida(unJugador);
			} catch (ElArchivoNoExiste e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
	
		
		}
	}
}
